import { IPSDataEntity } from '../dataentity/ipsdata-entity';
import { IPSDEField } from '../dataentity/defield/ipsdefield';
import { IPSSysSFPlugin } from './ipssys-sfplugin';
import { IPSSystemModule } from '../system/ipssystem-module';
import { IPSModelObject } from '../ipsmodel-object';

/**
 *
 * 子接口类型识别属性[]
 * @export
 * @interface IPSSysSequence
 */
export interface IPSSysSequence extends IPSModelObject {
  /**
   * 代码标识
   * @type {string}
   */
  codeName: string;

  getExtFormatParams(): string[] | null;

  get extFormatParams(): string[] | null;

  /**
   * 标识存储属性
   *
   * @type {IPSDEField}
   */
  getKeyPSDEField(): IPSDEField | null;

  /**
   * 标识存储属性
   *
   * @type {IPSDEField}
   */
  get keyPSDEField(): IPSDEField | null;

  /**
   * 标识存储属性（必须存在）
   *
   * @type {IPSDEField}
   */
  getKeyPSDEFieldMust(): IPSDEField;

  /**
   * 值序列最大值
   * @type {number}
   */
  maxValue: number;

  /**
   * 值序列最小值
   * @type {number}
   */
  minValue: number;

  /**
   * 实体对象
   *
   * @type {IPSDataEntity}
   */
  getPSDataEntity(): IPSDataEntity | null;

  /**
   * 实体对象
   *
   * @type {IPSDataEntity}
   */
  get psDataEntity(): IPSDataEntity | null;

  /**
   * 实体对象（必须存在）
   *
   * @type {IPSDataEntity}
   */
  getPSDataEntityMust(): IPSDataEntity;

  /**
   * 后端模板插件对象
   *
   * @type {IPSSysSFPlugin}
   */
  getPSSysSFPlugin(): IPSSysSFPlugin | null;

  /**
   * 后端模板插件对象
   *
   * @type {IPSSysSFPlugin}
   */
  get psSysSFPlugin(): IPSSysSFPlugin | null;

  /**
   * 后端模板插件对象（必须存在）
   *
   * @type {IPSSysSFPlugin}
   */
  getPSSysSFPluginMust(): IPSSysSFPlugin;

  /**
   * 系统模块
   *
   * @type {IPSSystemModule}
   */
  getPSSystemModule(): IPSSystemModule | null;

  /**
   * 系统模块
   *
   * @type {IPSSystemModule}
   */
  get psSystemModule(): IPSSystemModule | null;

  /**
   * 系统模块（必须存在）
   *
   * @type {IPSSystemModule}
   */
  getPSSystemModuleMust(): IPSSystemModule;

  /**
   * 值序列格式化
   * @type {string}
   */
  sequenceFormat: string;

  /**
   * 值序列标记
   * @type {string}
   */
  sequenceTag: string;

  /**
   * 值序列标记2
   * @type {string}
   */
  sequenceTag2: string;

  /**
   * 值序列类型
   * @description 值模式 [系统序列类型] {DB：数据库、 DE：实体、 USER：用户自定义、 USER2：用户自定义2、 USER3：用户自定义3、 USER4：用户自定义4 }
   * @type {( string | 'DB' | 'DE' | 'USER' | 'USER2' | 'USER3' | 'USER4')}
   */
  sequenceType: string | 'DB' | 'DE' | 'USER' | 'USER2' | 'USER3' | 'USER4';

  /**
   * 时间格式化
   * @type {string}
   */
  timeFormat: string;

  /**
   * 时间存储属性
   *
   * @type {IPSDEField}
   */
  getTimePSDEField(): IPSDEField | null;

  /**
   * 时间存储属性
   *
   * @type {IPSDEField}
   */
  get timePSDEField(): IPSDEField | null;

  /**
   * 时间存储属性（必须存在）
   *
   * @type {IPSDEField}
   */
  getTimePSDEFieldMust(): IPSDEField;

  /**
   * 类型存储属性
   *
   * @type {IPSDEField}
   */
  getTypePSDEField(): IPSDEField | null;

  /**
   * 类型存储属性
   *
   * @type {IPSDEField}
   */
  get typePSDEField(): IPSDEField | null;

  /**
   * 类型存储属性（必须存在）
   *
   * @type {IPSDEField}
   */
  getTypePSDEFieldMust(): IPSDEField;

  /**
   * 值存储属性
   *
   * @type {IPSDEField}
   */
  getValuePSDEField(): IPSDEField | null;

  /**
   * 值存储属性
   *
   * @type {IPSDEField}
   */
  get valuePSDEField(): IPSDEField | null;

  /**
   * 值存储属性（必须存在）
   *
   * @type {IPSDEField}
   */
  getValuePSDEFieldMust(): IPSDEField;
}
